import axios from "axios";
import Nprogress from "nprogress";
import { getTempid } from "@/utils/userAbout";
import store from "@/store";

// 引入加载的样式
import "nprogress/nprogress.css";

// 基础路径 设置超时 加载nprogress
// 1.在请求之前设置加载的loading  数据回来之前取消loading
// 2.响应拦截器 请求回来之后 处理data里面的数据
// 创建实例对象
const ajax = axios.create({
  // 这里已经匹配了基础路径 '/api'
  baseURL: "/api",
  timeout: 5000,
});

// 请求拦截器和响应拦截器

// 添加请求拦截器  请求一定是成功的
ajax.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么  在请求之前设置加载的loading
  config.headers.userTempId = getTempid();
  // 如果有token 则需要在请求头上加token
  let token = store.state.user.token;
  if (token) {
    config.headers.token = token;
  }

  // Nprogress.start();
  //   console.log(config)   // 请求报文里包含了url和超时
  return config;
});

// 添加响应拦截器
ajax.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么  数据回来之前取消加载的loading
    Nprogress.done();
    // console.log(response)
    return response.data;
  },
  function (error) {
    // 对响应错误做点什么
    // Nprogress.done();

    let status = error.response?.status;
    if (status === 401) {
      alert("未授权");
    } else if (status === 403) {
      alert("禁止访问");
    } else if (status === 404) {
      alert("页面找不到");
    } else if (status === 500) {
      alert("服务器内部错误");
    }
    // 返回一个进行中的promise  中断链式调用
    return new Promise(() => {});
  }
);

export default ajax;
